
package fr.miage.orleans.aar.modele;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 *
 * @author Steve Cancès <steve.cances@gmail.com>
 */
@Entity
@Table(schema = Modele.SCHEMA_NAME)
public class MatchTour implements Serializable {
    
    @Id
    @GeneratedValue
    private int matchTourId;
    
    private int numeroMatch;
    
    @ManyToOne
    private Tournoi tournoi;
    
    @ManyToOne
    //@JoinColumn(name = "MATCHENFANT_MATCHTOURID")
    private MatchTour matchEnfant;
    
    @OneToMany(mappedBy = "matchEnfant", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Collection<MatchTour> parents;
    
    @Enumerated(EnumType.STRING)
    private EtatMatchTour etatMatch;
    
    @ManyToOne
    private Arbitre arbitre;
    
    @ManyToOne
    private Equipe equipeA;
    
    @ManyToOne
    private Equipe equipeB;
    
    @OneToMany(targetEntity = But.class, mappedBy = "match", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
    private Collection<But> buts;
    
    public MatchTour() {
        this.buts = new ArrayList<>();
        this.parents = new ArrayList<>();
    }
    
    public int getMatchTourId() {
        return matchTourId;
    }

    public void setMatchTourId(int matchTourId) {
        this.matchTourId = matchTourId;
    }

    public int getNumeroMatch() {
        return numeroMatch;
    }

    public void setNumeroMatch(int numeroMatch) {
        this.numeroMatch = numeroMatch;
    }

    public MatchTour getMatchEnfant() {
        return matchEnfant;
    }

    public void setMatchEnfant(MatchTour matchEnfant) {
        this.matchEnfant = matchEnfant;
    }

    public Tournoi getTournoi() {
        return tournoi;
    }

    public void setTournoi(Tournoi tournoi) {
        this.tournoi = tournoi;
    }

    public EtatMatchTour getEtatMatch() {
        return etatMatch;
    }

    public void setEtatMatch(EtatMatchTour etatMatch) {
        this.etatMatch = etatMatch;
    }

    public Arbitre getArbitre() {
        return arbitre;
    }

    public void setArbitre(Arbitre arbitre) {
        this.arbitre = arbitre;
    }

    public Equipe getEquipeA() {
        return equipeA;
    }

    public void setEquipeA(Equipe equipeA) {
        this.equipeA = equipeA;
    }

    public Equipe getEquipeB() {
        return equipeB;
    }

    public void setEquipeB(Equipe equipeB) {
        this.equipeB = equipeB;
    }

    public Collection<But> getButs() {
        return buts;
    }

    public void setButs(Collection<But> buts) {
        this.buts = buts;
    }
  
    public Collection<ButMatch> getButsMatch() {
        Collection<ButMatch> butMatchs = new ArrayList<>();
        for(But but : this.buts) {
            if(but.getClass().equals(ButMatch.class)) {
                butMatchs.add((ButMatch) but);
            }
        }
        return butMatchs;
    }
    
    public Collection<ButTirAuBut> getButsTirAuBut() {
        Collection<ButTirAuBut> butTirAuButs = new ArrayList<>();
        for(But but : this.buts) {
            if(but.getClass().equals(ButTirAuBut.class)) {
                butTirAuButs.add((ButTirAuBut) but);
            }
        }
        return butTirAuButs;
    }

    @Override
    public String toString() {
        return "MatchTour{" + "matchTourId=" + matchTourId + ", tournoi=" + tournoi + ", etatMatch=" + etatMatch + ", arbitre=" + arbitre + ", equipeA=" + equipeA + ", equipeB=" + equipeB + '}';
    }

    public Collection<MatchTour> getParents() {
	return parents;
    }

    public void setParents(Collection<MatchTour> parents) {
	this.parents = parents;
    }
    
    
 
}
